/*
 * 爱组搭，低代码组件化开发平台
 * ------------------------------------------
 * 受知识产权保护，请勿删除版权申明，开发平台不允许做非法网站，后果自负
 */
package com.aizuda.boot.modules.system.service;

import com.aizuda.boot.modules.business.contract.dto.SingleResponse;
import com.aizuda.boot.modules.business.employee.domain.request.EmployeeQueryById;
import com.aizuda.boot.modules.business.employee.domain.request.EmployeeQueryVO;
import com.aizuda.boot.modules.business.employee.domain.request.EmployeeQueryWithContractVO;
import com.aizuda.boot.modules.business.employee.domain.response.EmployeeQueryShowVO;
import com.aizuda.boot.modules.business.employee.domain.response.EmployeeQueryWithParticipantVO;
import com.aizuda.boot.modules.system.entity.SysUser;
import com.aizuda.boot.modules.system.entity.dto.ResetPasswordDTO;
import com.aizuda.boot.modules.system.entity.dto.SysUserDTO;
import com.aizuda.boot.modules.system.entity.vo.LoginUserVo;
import com.aizuda.boot.modules.system.entity.vo.SysUserRelIdsVO;
import com.aizuda.boot.modules.system.entity.vo.SysUserVO;
import com.aizuda.boot.modules.system.entity.vo.UserAvatarVO;
import com.aizuda.boot.modules.business.feishu.domain.QueryUserDTO;
import com.aizuda.boot.modules.business.feishu.domain.UserVo;
import com.aizuda.service.service.IBaseService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;

/**
 * 系统用户 服务类
 *
 * @author 青苗
 * @since 2021-11-03
 */
public interface ISysUserService extends IBaseService<SysUser> {

    Page<SysUser> page(Page<SysUser> page, SysUserVO vo);

    /**
     * 查询满足 20 条记录的用户列表
     */
    List<SysUser> list20ByUsername(String username);

    boolean save(SysUserDTO dto);

    boolean updateById(SysUserDTO dto);

    /**
     * 修改用户状态
     */
    boolean updateStatusById(Long id, Integer status);

    boolean resetPassword(ResetPasswordDTO dto);

    SysUser getById(Long id);

    /**
     * 根据 ID 获取关联角色部门ID列表
     */
    SysUserRelIdsVO getRelIdsById(Long id);

    /**
     * 查询员工
     * @param query
     * @return
     */
    List<EmployeeQueryShowVO> queryEmployee(EmployeeQueryVO query);

    /**
     * 根据员工ID列表查询员工信息
     * @param employeeIds
     * @return
     */
    List<EmployeeQueryShowVO> queryEmployeeShow(EmployeeQueryById employeeIds);

    /**
     * 查询员工并标记协商参与者状态
     * @param query 查询条件（包含msg和contractId）
     * @return 员工列表（带协商参与者标记）
     */
    List<EmployeeQueryWithParticipantVO> queryEmployeeWithNegotiationStatus(EmployeeQueryWithContractVO query);

    /**
     * 根据部门ID查询以该部门为主部门的员工ID列表
     * @param departmentId
     * @return
     */
    List<Long> getEmployeeIdsByMainDepartment(Long departmentId);



    /**
     * 同步飞书用户信息
     */
    void syncFeiShuUser();

    /**
     * 根据部门ID获取部门名称
     * @param departmentId 部门ID
     * @return 部门名称
     */
    String getDepartmentNameById(Long departmentId);


    /**
     * 获取当前登录用户信息
     *
     * @return LoginUserVo
     */
    LoginUserVo getUserInfo();

    /**
     * 获取当前租户下的用户
     * @param queryUserDTO
     * @return
     */
    SingleResponse<List<UserVo>> getAtUsers(QueryUserDTO queryUserDTO);

    /**
     * 清除用户缓存
     * @param userId 用户ID，如果为空则清除当前登录用户的缓存
     * @return 是否成功
     */
    boolean clearUserCache(Long userId);

    /**
     * 根据用户ID列表获取用户头像信息
     * @param userIds 用户ID列表
     * @return 用户头像信息列表
     */
    List<UserAvatarVO> getUserAvatarsByIds(List<Long> userIds);
}
